/**
 * MapVerse 通用地图弹窗组件
 * @description 提供灵活的弹窗绑定功能，完全由项目控制样式和内容
 */

/**
 * 通用地图弹窗方法
 * @param {Object} layer - mars3d 图层对象
 * @param {Object} options - 配置选项
 * @param {Function} options.renderContent - 内容渲染函数 (attr, event) => string
 * @param {string} options.template - 弹窗HTML模板，{content}会被替换为renderContent的返回值
 * @param {number} options.horizontalOrigin - 水平对齐方式，默认CENTER
 * @param {number} options.verticalOrigin - 垂直对齐方式，默认BOTTOM
 * @param {Function} options.onPopupOpen - 弹窗打开回调
 * @param {Function} options.onPopupClose - 弹窗关闭回调
 * @returns {Object} layer - 返回传入的图层对象，支持链式调用
 */
export const useMapPopup = (layer, options = {}) => {
    const {
        // 内容渲染函数
        renderContent = null,
        
        // 弹窗模板（项目自定义）
        template = `<div class="mapverse-popup">{content}</div>`,
        
        // 定位配置
        horizontalOrigin = Cesium.HorizontalOrigin.CENTER,
        verticalOrigin = Cesium.VerticalOrigin.BOTTOM,
        
        // 事件回调
        onPopupOpen = null,
        onPopupClose = null,
        
        // 额外配置
        ...extraOptions
    } = options;

    // 绑定弹窗
    layer.bindPopup(
        function (event) {
            const attr = event.graphic.attr;
            
            if (renderContent && typeof renderContent === 'function') {
                return renderContent(attr, event);
            }
            
            // 默认简单渲染
            return `<div class="mapverse-default-popup">默认内容: ${attr.name || attr.title || 'unnamed'}</div>`;
        },
        {
            template,
            horizontalOrigin,
            verticalOrigin,
            ...extraOptions  // 允许传递其他 mars3d popup 配置
        }
    );

    // 绑定事件监听
    bindPopupEvents(layer, onPopupOpen, onPopupClose);
    
    return layer;
};

/**
 * 弹窗事件绑定器
 * @description 提供更好的参数命名
 * @param {Object} layer - mars3d 图层对象
 * @param {Function} onOpen - 弹窗打开回调函数
 * @param {Function} onClose - 弹窗关闭回调函数
 */
export const bindPopupEvents = (layer, onOpen, onClose) => {
    if (onOpen && typeof onOpen === 'function') {
        layer.on(mars3d.EventType.popupOpen, onOpen);
    }
    
    if (onClose && typeof onClose === 'function') {
        layer.on(mars3d.EventType.popupClose, onClose);
    }
};

/**
 * 兼容性方法
 */
export const callBackFn = bindPopupEvents;
